package com.ruoyi.by.health.service;

import com.ruoyi.by.health.domain.entity.ByhealthEmployee;
import com.ruoyi.by.health.domain.entity.ByhealthLotteryOutcome;
import com.ruoyi.by.health.domain.form.EmployeeGameForm;
import com.ruoyi.by.health.domain.form.WechatRegisteredForm;
import com.ruoyi.by.health.domain.vo.EmployeeGameVo;
import com.ruoyi.common.core.domain.AjaxResult;

import java.util.List;

/**
 * 员工 业务层
 *
 * @author ruoyi
 */
public interface IByhealthEmployeeService {
    /**
     * 根据条件分页查询员工列表
     *
     * @param emp 员工信息
     * @return 员工信息集合信息
     */
    public List<ByhealthEmployee> selectEmployeeList(ByhealthEmployee emp);

    public List<ByhealthEmployee> selectEmployeeListNoLottery(ByhealthLotteryOutcome lotteryOutcome);

    public List<ByhealthEmployee> selectRandomEmployeeList(Integer count);

    /**
     * 通过员工名查询员工
     *
     * @param empCode 员工名
     * @return 员工对象信息
     */
    public ByhealthEmployee selectEmployeeByCode(String empCode);

    /**
     * 通过员工empId查询员工
     *
     * @param empId 员工empId
     * @return 员工对象信息
     */
    public ByhealthEmployee selectEmployeeByEmpId(Long empId);

    /**
     * 通过员工名查询员工
     *
     * @param openId 员工名
     * @return 员工对象信息
     */
    public ByhealthEmployee selectEmployeeByOpenId(String openId);

    /**
     * 通过员工名查询员工
     *
     * @param appOpenId 员工名
     * @return 员工对象信息
     */
    public ByhealthEmployee selectEmployeeByAppOpenId(String appOpenId);

    /**
     * 保存员工游戏分数  并计算排名
     *
     * @param gameForm 员工名
     * @return 员工对象信息
     */
    public AjaxResult gameScore(EmployeeGameForm gameForm);

    /**
     * 获取排行榜
     *
     * @param gameForm 获取前多少名
     * @return 员工对象信息
     */
    public List<EmployeeGameVo> gameScoreList(EmployeeGameForm gameForm);

    /**
     * 注册员工信息
     *
     * @param emp 员工信息
     * @return 结果
     */
    public AjaxResult registerEmployee(WechatRegisteredForm emp);

    /**
     * 新增员工信息
     *
     * @param emp 员工信息
     * @return 结果
     */
    public int insertEmployee(ByhealthEmployee emp);

    /**
     * 修改员工信息
     *
     * @param emp 员工信息
     * @return 结果
     */
    public int updateEmployee(ByhealthEmployee emp);

    /**
     * 导入员工数据
     *
     * @param empList         员工数据列表
     * @param isUpdateSupport 是否更新支持，如果已存在，则进行更新数据
     * @param operName        操作员工
     * @return 结果
     */
    public String importEmployee(List<ByhealthEmployee> empList, Boolean isUpdateSupport, String operName);

    /**
     * 获取普通员工数量
     *
     * @return
     */
    public Integer allEmployeeCount();

    /**
     * 获取boss数量
     *
     * @return
     */
    public Integer allBossCount();
}
